package com.jmyd.coupon.server.service;

import com.jmyd.commons.base.service.IBaseService;
import com.jmyd.commons.base.vo.PageBean;
import com.jmyd.coupon.server.domain.dto.*;
import com.jmyd.coupon.server.domain.vo.SceneCouponDrawRecordVo;
import com.jmyd.coupon.server.domain.vo.SceneCouponUseRecordVo;
import com.jmyd.coupon.server.domain.vo.SceneCouponVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 优惠券业务层
 *
 * @author samphin
 * @date 2019-8-28 16:35:13
 */
public interface ISceneCouponService extends IBaseService<Long, SceneCouponDto, SceneCouponVo> {

    /**
     * 发放优惠券
     *
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    boolean grantCoupon(SceneGrantCouponDto couponDto);

    /**
     * 领取优惠券
     *
     * @param drawCouponDto
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    boolean drawCoupon(SceneDrawCouponDto drawCouponDto,HttpServletRequest request);

    /**
     * 用户注册领取免单优惠券
     *
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    boolean drawFreeOfChargeCoupon(HttpServletRequest request);

    /**
     * 使用优惠券
     *
     * @param sceneUseCouponDto 使用优惠券业务参数
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    boolean useCoupon(SceneUseCouponDto sceneUseCouponDto,HttpServletRequest request);

    /**
     * 查询用户未使用的优惠券
     *
     * @param userId 用户ID
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    List<SceneCouponVo> queryNoUseCouponList(String userId);

    /**
     * 查询已过期的优惠券
     *
     * @param userId 用户ID
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    List<SceneCouponVo> queryExpiredCouponList(String userId);

    /**
     * 查询优惠券使用信息列表
     *
     * @param queryDto
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    PageBean<SceneCouponUseRecordVo> queryCouponUseRecordList(SceneCouponUsedRecordQueryDto queryDto);

    /**
     * 查询优惠券领取列表
     *
     * @param queryDto 查询对象
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    PageBean<SceneCouponDrawRecordVo> queryCouponDrawList(SceneCouponDrawQueryDto queryDto);

    /**
     * 查询优惠券领取列表
     *
     * @param queryDto 查询对象
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    PageBean<SceneCouponDrawRecordVo> queryMyCouponDrawList(SceneCouponDrawQueryDto queryDto,HttpServletRequest request);

    /**
     * 查询优惠券分页列表
     *
     * @param queryDto
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    PageBean<SceneCouponVo> queryPageList(SceneCouponQueryDto queryDto, HttpServletRequest request);

    /**
     * 调整优惠券信息
     *
     * @param dto 优惠券信息
     * @author samphin
     * @date 2021-7-30 15:55:50
     */
    boolean updateById(SceneCouponUpdateDto dto, HttpServletRequest request);

}
